prenos souboru po pres TServerSocket a TClientSocket
Otázka od: Tomas Bradle
29. 5. 2004 15:55
Zdravim vsechny,
chci posilat po siti binarni data pres dvojici TClientSocket a TServerSocket
a nejak mi to nechodi. Tak jsem to cele zjednodusil do nasledujiciho
prikladu. Mam dva programy - jedem pro server a jeden pro klienta. Z klienta
posilam soubor na server.
toto je kus kodu serveru:
=========================
procedure TfrTSSvrMain.ssFileClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
FStream:=TFileStream.Create('C:\xy.jpg', fmCreate);
end;
procedure TfrTSSvrMain.ssFileClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
FStream.free;
end;
procedure TfrTSSvrMain.ssFileClientRead(Sender: TObject; Socket:
TCustomWinSocket);
var
sz: integer;
p: pointer;
begin
sz:=Socket.ReceiveLength;
GetMem(p, sz);
try
Socket.ReceiveBuf(p^, sz);
if Assigned(FStream) then
FStream.WriteBuffer(p^, sz);
finally
FreeMem(p);
end; {try}
end;
toto je kus kodu klienta:
=========================
procedure TfrTSCliMain.SpeedButton2Click(Sender: TObject);
var
fs: TFileStream;
p: pointer;
begin
csFile.Address:=eIP.Text;
csFile.Active:=true;
try
fs:=TFileStream.Create('c:\x.jpg', fmOpenRead);
try
GetMem(p, fs.size);
try
fs.ReadBuffer(p^, fs.size);
csFile.Socket.SendBuf(p^, fs.size);
finally
FreeMem(p);
end; {try}
finally
fs.free;
end; {try}
finally
csFile.Active:=false;
end; {try}
end;
Ten obrazek mi prijde zmrsenej, horni cast je OK ale potom se "rozjede
obraz".
Zdroj ma 204591 bajtu, cil ma 239455 bajtu, cili naroste.
Nevi nekdo cim by to mohlo bejt ? Mam D5 a oba pocitace jsou na W2K SP2.
ClientType i ServerType je ctNonBlocking.
diky
Tomas Bradle
t.bradle@worldonline.cz